library(tidyverse)
library(here)
library(dplyr)
library(tidyquery)
library(plotly)
theme_set(theme_gray())
# SEMPRE read_csv NUNCA read.csv
alunos = read_csv(
here("Dados-UFCG-jul2021/alunos.csv"),
col_types = cols(
),
)
## Warning: 567184 parsing failures.
## row col expected actual file
## 2589 APV_NOTA_1 a double COMUNICACAO E EXPRESSAO 'C:/Users/perei/Desktop/EDA-TCC/Dados-UFCG-jul2021/alunos.csv'
## 2589 APV_NOTA_2 a double LINGUA ESTRANGEIRA 'C:/Users/perei/Desktop/EDA-TCC/Dados-UFCG-jul2021/alunos.csv'
## 2589 APV_NOTA_3 a double HISTORIA 'C:/Users/perei/Desktop/EDA-TCC/Dados-UFCG-jul2021/alunos.csv'
## 2589 APV_NOTA_4 a double GEOGRAFIA 'C:/Users/perei/Desktop/EDA-TCC/Dados-UFCG-jul2021/alunos.csv'
## 2589 APV_NOTA_5 a double MATEMATICA 'C:/Users/perei/Desktop/EDA-TCC/Dados-UFCG-jul2021/alunos.csv'
## .... .......... ........ ....................... ..............................................................
## See problems(...) for more details.
#ALU_ANO_INGRESSO
# Filtrando alunos n evadidos
# Filtrando alunos evadidos de 2019 a 2019
alunos = alunos %>% filter(ALU_ANO_EVASA > 2008, ALU_ANO_EVASA < 2020, ALU_CCU_CUR_COD_CURSO==14102100, !is.na(ALU_ANO_EVASA))
options(repr.plot.width = 14, repr.plot.height = 7)
p1 <- alunos %>%
group_by(ALU_FORMA_EVASAO) %>%
summarise(
contagem = n()) %>%
ggplot(aes(x = reorder(ALU_FORMA_EVASAO,(-contagem)), y=contagem,label=contagem,fill=as.factor(ALU_FORMA_EVASAO))) +
geom_bar(stat="identity",width = 0.9,alpha=0.5) +
geom_text(size= 3.5, vjust = -0.3) +
labs(
x="Código de evasão",
y="Quantidade"
) +
scale_fill_discrete(name="Forma de evasão",
breaks=c("0","1", "2", "3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","50"),
labels=c("Aluno regularmente matriculado", "Graduado", "Transferência para outra Instituição de Ensino Superior","Falecimento","Abandono de curso","Cancelamento de matrícula","Cancelamento para mudança de curso","Cancelamento por decisão judicial","Cancelamento por solicitação do aluno","Suspensão temporária","Curso concluído - não colou grau","Cancelamento por não cumprimento da PEC","Reentrada no curso (novo vestibular)","Cumprimento convênio","Novo regimento","Não comparecimento a cadastro", "Remanejado de curso","Não compareceu ao remanejamento","Não compareceu à matrícula - Alunos ingressantes","Término de intercâmbio","Graduando por decisão judicial","Matrícula cancelada por reprovação por falta","Matrícula cancelada por reprovações na mesma disciplina","Matrícula suspensa - Débito na biblioteca","Aguardando cadastramento
"))
ggsave("fig.png",p1,width = 14,
height = 7)
p1
#Filtrando os alunos de interesse:
# 22 - Mátricula cancelada por reprovações na mesma disciplina
# 4 - Abandono de curso
# 21 - Mátricula cancelada por reprovação por falta
# 8 - Cancelamento por solicitação do aluno
alunos = alunos %>% filter(ALU_FORMA_EVASAO == 22 | ALU_FORMA_EVASAO == 4| ALU_FORMA_EVASAO == 21 | ALU_FORMA_EVASAO == 8)
# SEMPRE read_csv NUNCA read.csv
historico = read_csv(
here("Dados-UFCG-jul2021/historico.csv"),
col_types = cols(
MAT_TUR_PERIODO = col_character(),
MAT_TUR_ANO = col_character()
)
)
## Warning: 5572026 parsing failures.
## row col expected actual file
## 1 -- 8 columns 9 columns 'C:/Users/perei/Desktop/EDA-TCC/Dados-UFCG-jul2021/historico.csv'
## 2 -- 8 columns 9 columns 'C:/Users/perei/Desktop/EDA-TCC/Dados-UFCG-jul2021/historico.csv'
## 3 -- 8 columns 9 columns 'C:/Users/perei/Desktop/EDA-TCC/Dados-UFCG-jul2021/historico.csv'
## 5 -- 8 columns 9 columns 'C:/Users/perei/Desktop/EDA-TCC/Dados-UFCG-jul2021/historico.csv'
## 6 -- 8 columns 9 columns 'C:/Users/perei/Desktop/EDA-TCC/Dados-UFCG-jul2021/historico.csv'
## ... ... ......... ......... .................................................................
## See problems(...) for more details.
historico
## # A tibble: 4,525,499 x 8
## MAT_TUR_ANO MAT_TUR_PERIODO MAT_TUR_DIS_DISCI~ MAT_TUR_TURMA MAT_ALU_MATRICU~
## <chr> <chr> <dbl> <lgl> <dbl>
## 1 1981 2 1109005 NA 180130145
## 2 1982 1 1303012 NA 180130145
## 3 1982 1 1305015 NA 180130145
## 4 1982 1 1305075 NA 180130145
## 5 1982 1 1301003 NA 180130145
## 6 1982 1 1114031 NA 180130145
## 7 1982 2 1305052 NA 180130145
## 8 1982 2 1301004 NA 180130145
## 9 1982 2 1301022 NA 180130145
## 10 1982 2 1301024 NA 180130145
## # ... with 4,525,489 more rows, and 3 more variables: MAT_TIPO_MATRICULA <dbl>,
## # MAT_SITUACAO <dbl>, MAT_MEDIA_FINAL <dbl>
historico = historico %>% filter(MAT_SITUACAO != 1)
alunos
## # A tibble: 893 x 34
## ALU_MATRICULA ALU_CCU_CUR_COD_CURSO ALU_CCU_COD_CURRICULO ALU_FORMA_INGRESSO
## <dbl> <dbl> <dbl> <dbl>
## 1 103210022 14102100 1999 1
## 2 103210012 14102100 1999 1
## 3 102210027 14102100 1999 1
## 4 104210021 14102100 1999 1
## 5 104210029 14102100 1999 1
## 6 105210137 14102100 1999 1
## 7 105210152 14102100 1999 1
## 8 106110120 14102100 1999 1
## 9 106210150 14102100 1999 1
## 10 106210154 14102100 1999 1
## # ... with 883 more rows, and 30 more variables: ALU_ANO_INGRESSO <dbl>,
## # ALU_PERIODO_INGRESSO <dbl>, ALU_FORMA_EVASAO <dbl>, ALU_ANO_EVASA <dbl>,
## # ALU_PERIODO_EVASAO <dbl>, ALU_TIPO_RESERVA_VAGAS <lgl>, ALU_CPF <chr>,
## # ALU_SEXO <dbl>, ALU_ANO_NASCIMENTO <dbl>, ALU_COR_CODIGO <dbl>,
## # ALU_NAT_MUN_CODIGO <dbl>, ALU_ANO_CONC_ENSINO_MEDIO <lgl>,
## # ALU_TIPO_ENSINO_MEDIO <lgl>, APV_MEDIA_GERAL <dbl>, APV_DISC_1 <chr>,
## # APV_NOTA_1 <dbl>, APV_DISC_2 <chr>, APV_NOTA_2 <dbl>, APV_DISC_3 <chr>,
## # APV_NOTA_3 <dbl>, APV_DISC_4 <chr>, APV_NOTA_4 <dbl>, APV_DISC_5 <chr>,
## # APV_NOTA_5 <dbl>, APV_DISC_6 <chr>, APV_NOTA_6 <dbl>, APV_DISC_7 <chr>,
## # APV_NOTA_7 <dbl>, APV_DISC_8 <chr>, APV_NOTA_8 <dbl>
# SEMPRE read_csv NUNCA read.csv
disciplinas = read_csv(
here("Dados-UFCG-jul2021/disciplinas-geral.csv")
)
##
## -- Column specification --------------------------------------------------------
## cols(
## DIS_DISCIPLINA = col_double(),
## DIS_DESCRICAO = col_character(),
## DIS_QTD_CR = col_double(),
## DIS_QTD_CH = col_double(),
## DIS_SET_COD_SETOR = col_double(),
## DIS_TDI_COD_TIPO = col_double()
## )
disciplinas
## # A tibble: 9,266 x 6
## DIS_DISCIPLINA DIS_DESCRICAO DIS_QTD_CR DIS_QTD_CH DIS_SET_COD_SET~
## <dbl> <chr> <dbl> <dbl> <dbl>
## 1 1105001 "MATERIAIS DE CONSTRU\~ 5 75 11050000
## 2 1105005 "HIGIENE INDUSTRIAL E ~ 3 45 11050000
## 3 1105006 "OFICINA MEC\xc2NICA I" 2 30 11050000
## 4 1105007 "OFICINA MEC\xc2NICA I~ 4 60 11050000
## 5 1105012 "ESTUDO DE TEMPOS E MO~ 4 60 11050000
## 6 1105013 "PROG E CONTROLE DA PR~ 4 60 11050000
## 7 1105014 "CONTROLE DE QUALIDADE" 4 60 11050000
## 8 1105019 "TECNOLOGIA MEC\xc2NIC~ 4 60 11050000
## 9 1105024 "DESENHO DE M\xc1QUINA~ 3 75 11050000
## 10 1105035 "METODOLOGIA VISUAL I" 4 60 11050000
## # ... with 9,256 more rows, and 1 more variable: DIS_TDI_COD_TIPO <dbl>
historico_cc <- query(
"SELECT a.ALU_MATRICULA, a.ALU_FORMA_EVASAO, a.ALU_TIPO_RESERVA_VAGAS, a.ALU_SEXO, a.ALU_ANO_NASCIMENTO, h.MAT_TUR_DIS_DISCIPLINA, h.MAT_SITUACAO,h.MAT_TIPO_MATRICULA, a.ALU_ANO_EVASA, h.MAT_TUR_ANO,h.MAT_TUR_PERIODO
FROM alunos a LEFT JOIN historico h ON a.ALU_MATRICULA = h.MAT_ALU_MATRICULA;"
)
#Criar coluna SEMESTRE #Alunos com histórico estranho. #113210439 #113210072
historico_cc <- historico_cc %>% mutate(SEMESTRE = paste(MAT_TUR_ANO,MAT_TUR_PERIODO, sep="."))
semestres <- query(
"SELECT p.ALU_MATRICULA as matricula, COUNT(DISTINCT(SEMESTRE)) as n_semestres
FROM historico_cc p
GROUP BY p.ALU_MATRICULA"
)
result <- query(
"SELECT p.ALU_MATRICULA, p.ALU_FORMA_EVASAO,p.ALU_TIPO_RESERVA_VAGAS, p.ALU_SEXO, p.ALU_ANO_NASCIMENTO, p.MAT_TUR_DIS_DISCIPLINA, d.DIS_QTD_CR, d.DIS_DESCRICAO, p.ALU_ANO_EVASA, p.MAT_SITUACAO
FROM historico_cc p LEFT JOIN disciplinas d ON p.MAT_TUR_DIS_DISCIPLINA = d.DIS_DISCIPLINA;"
)
alunos_ficha = query(
"SELECT r.ALU_MATRICULA as matricula, r.ALU_FORMA_EVASAO as forma_evasao, r.ALU_ANO_EVASA as ano_evasao, r.ALU_TIPO_RESERVA_VAGAS, r.ALU_SEXO as sexo, r.ALU_ANO_NASCIMENTO as ano_nascimento, SUM(r.DIS_QTD_CR) as creditos_acumulados
FROM result r
GROUP BY r.ALU_MATRICULA, r.ALU_FORMA_EVASAO, r.ALU_ANO_EVASA, r.ALU_TIPO_RESERVA_VAGAS,r.ALU_SEXO,r.ALU_ANO_NASCIMENTO
;"
)
#SELECIONA AS DISCIPLINAS APROVEITADAS, CONTAM SÓ AS APROVADAS(CÓDIGO 3), incluindo as dispensadas:
historico2 <- historico %>% filter(MAT_SITUACAO==3)
historico_cc2 <- query(
"SELECT a.ALU_MATRICULA, h.MAT_TUR_DIS_DISCIPLINA
FROM alunos a LEFT JOIN historico2 h ON a.ALU_MATRICULA = h.MAT_ALU_MATRICULA;"
)
result2 <- query(
"SELECT p.ALU_MATRICULA, d.DIS_QTD_CR
FROM historico_cc2 p LEFT JOIN disciplinas d ON p.MAT_TUR_DIS_DISCIPLINA = d.DIS_DISCIPLINA;"
)
alunos_aprovados = query(
"SELECT r.ALU_MATRICULA as matricula, SUM(r.DIS_QTD_CR) as creditos_aproveitados
FROM result2 r
GROUP BY r.ALU_MATRICULA;"
)
result %>% filter(ALU_MATRICULA==112150436)
## # A tibble: 28 x 10
## ALU_MATRICULA ALU_FORMA_EVASAO ALU_TIPO_RESERVA_V~ ALU_SEXO ALU_ANO_NASCIMEN~
## <dbl> <dbl> <lgl> <dbl> <dbl>
## 1 112150436 8 NA 1 1991
## 2 112150436 8 NA 1 1991
## 3 112150436 8 NA 1 1991
## 4 112150436 8 NA 1 1991
## 5 112150436 8 NA 1 1991
## 6 112150436 8 NA 1 1991
## 7 112150436 8 NA 1 1991
## 8 112150436 8 NA 1 1991
## 9 112150436 8 NA 1 1991
## 10 112150436 8 NA 1 1991
## # ... with 18 more rows, and 5 more variables: MAT_TUR_DIS_DISCIPLINA <dbl>,
## # DIS_QTD_CR <dbl>, DIS_DESCRICAO <chr>, ALU_ANO_EVASA <dbl>,
## # MAT_SITUACAO <dbl>
# Calculando Taxa de sucesso
alunos_ficha = merge(alunos_ficha,alunos_aprovados)
alunos_ficha = alunos_ficha %>% mutate(taxa_sucesso= creditos_aproveitados / creditos_acumulados)
# Calculando Carga Média (Créditos por semestre)
alunos_ficha <- merge(alunos_ficha,semestres)
alunos_ficha <- alunos_ficha %>% mutate(carga_media = creditos_acumulados/ n_semestres)
# Adicionando idade do aluno no ano de evasão
alunos_ficha <- alunos_ficha %>% mutate(idade_evasao=ano_evasao - ano_nascimento)
# Removendo alunos com histórico
alunos_ficha <- alunos_ficha %>% filter(!is.na(taxa_sucesso))
p2 <- alunos_ficha %>% ggplot(aes(x=creditos_acumulados,fill=as.factor(forma_evasao))) +
facet_wrap(~forma_evasao,ncol=1) +
geom_histogram(binwidth = 10) + scale_fill_discrete(name="Forma de evasão",
breaks=c("0","1", "2", "3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","50"),
labels=c("Aluno regularmente matriculado", "Graduado", "Transferência para outra Instituição de Ensino Superior","Falecimento","Abandono de curso","Cancelamento de matrícula","Cancelamento para mudança de curso","Cancelamento por decisão judicial","Cancelamento por solicitação do aluno","Suspensão temporária","Curso concluído - não colou grau","Cancelamento por não cumprimento da PEC","Reentrada no curso (novo vestibular)","Cumprimento convênio","Novo regimento","Não comparecimento a cadastro", "Remanejado de curso","Não compareceu ao remanejamento","Não compareceu à matrícula - Alunos ingressantes","Término de intercâmbio","Graduando por decisão judicial","Matrícula cancelada por reprovação por falta","Matrícula cancelada por reprovações na mesma disciplina","Matrícula suspensa - Débito na biblioteca","Aguardando cadastramento
"))
p2
ggsave("fig3.png",p2,width = 14,
height = 7)
grupo_1 = alunos_ficha %>% filter(creditos_acumulados <= 40, creditos_aproveitados <= 24)
grupo_2 = anti_join(alunos_ficha,grupo_1)
## Joining, by = c("matricula", "forma_evasao", "ano_evasao", "ALU_TIPO_RESERVA_VAGAS", "sexo", "ano_nascimento", "creditos_acumulados", "creditos_aproveitados", "taxa_sucesso", "n_semestres", "carga_media", "idade_evasao")
set.seed(1)
#grupo_1_rotulado <- grupo_1[,-1]
#row.names(grupo_1_rotulado) <- grupo_1[,1]
grupo_1_numerical = grupo_1 %>% select("forma_evasao","ano_evasao","sexo","ano_nascimento","taxa_sucesso","idade_evasao","carga_media")
# Normalization
grupo_1_numerical_norm <- as.data.frame(scale(grupo_1_numerical))
# load required packages
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(NbClust)
# Elbow method
fviz_nbclust(grupo_1_numerical_norm, kmeans, method = "wss") +
geom_vline(xintercept = 4, linetype = 2) + # add line for better visualisation
labs(subtitle = "Elbow method") # add subtitle
grupo_1_kmeans <- kmeans(grupo_1_numerical_norm, centers=4)
#grupo_1$grupo <- as.character(grupo_1_kmeans$cluster)
# Dimension reduction using PCA
pca <- prcomp(grupo_1_numerical, scale = TRUE)
# Coordinates of individuals
ind.coord <- as.data.frame(get_pca_ind(pca)$coord)
# Add clusters obtained using the K-means algorithm
ind.coord$cluster <- factor(grupo_1_kmeans$cluster)
ind.coord$matricula <- grupo_1$matricula
ind.coord$idade_evasao <- grupo_1$idade_evasao
ind.coord$carga_media <- grupo_1$carga_media
ind.coord$taxa_sucesso <- grupo_1$taxa_sucesso
ind.coord$forma_evasao <- grupo_1$forma_evasao
ind.coord$sexo <- grupo_1$sexo
ind.coord$ano_nascimento <- grupo_1$ano_nascimento
# Data inspection
head(ind.coord)
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5 Dim.6
## 1 -0.8931281 -0.9811823 -0.2114541 1.0127862 2.04731825 -1.6095356
## 2 -2.2530168 -1.4086821 -0.8287783 -0.6509348 0.79271042 -0.2274447
## 3 -0.4225949 -1.3527823 -1.2754890 -0.9246125 1.12016504 -0.3352418
## 4 -2.7106222 -1.4226571 -0.7171007 -0.5825153 0.71084677 -0.2004954
## 5 -0.2810531 -1.3914175 -2.7287158 0.7844019 -0.06821866 0.1214720
## 6 -0.9674613 -1.4123800 -2.5611993 0.8870311 -0.19101414 0.1618959
## Dim.7 cluster matricula idade_evasao carga_media taxa_sucesso
## 1 8.314646e-16 4 108110011 22 20 0.4
## 2 1.014897e-15 4 108210015 27 24 0.0
## 3 9.038745e-16 4 108210023 19 24 0.0
## 4 1.014897e-15 4 108210035 29 24 0.0
## 5 1.014897e-15 4 108210306 19 24 0.0
## 6 1.011427e-15 4 109110001 22 24 0.0
## forma_evasao sexo ano_nascimento
## 1 21 1 1987
## 2 21 1 1982
## 3 21 1 1990
## 4 21 1 1980
## 5 21 2 1990
## 6 21 2 1987
# Percentage of variance explained by dimensions
eigenvalue <- round(get_eigenvalue(pca), 1)
variance.percent <- eigenvalue$variance.percent
head(eigenvalue)
## eigenvalue variance.percent cumulative.variance.percent
## Dim.1 2.0 28.4 28.4
## Dim.2 1.3 18.6 46.9
## Dim.3 1.2 16.8 63.7
## Dim.4 1.0 13.9 77.6
## Dim.5 0.8 11.7 89.3
## Dim.6 0.7 10.7 100.0
library(ggpubr)
ggscatter(
ind.coord, x = "Dim.1", y = "Dim.2",
color = "cluster", palette = "npg", ellipse = TRUE, ellipse.type = "convex", ggtheme = theme_bw(),
xlab = paste0("Dim 1 (", variance.percent[1], "% )" ),
ylab = paste0("Dim 2 (", variance.percent[2], "% )" )
) +
stat_mean(aes(color = cluster), size = 4)
fig <- plot_ly(data = ind.coord,type="scatter",mode="markers", size=12,x = ~Dim.1, y = ~Dim.2, color = ~cluster, text = ~paste("Matrícula: ", matricula, '<br>Idade:', idade_evasao, '<br>Carga média:', carga_media,'<br>Taxa de sucesso:', taxa_sucesso,'<br>Sexo:', sexo, '<br>Forma de evasão:', forma_evasao,'<br>Ano de nascimento:', ano_nascimento))
fig
#grupo_2_rotulado <- grupo_2[,-1]
#row.names(grupo_2_rotulado) <- grupo_2[,1]
grupo_2_numerical = grupo_2 %>% select("forma_evasao","ano_evasao","sexo","ano_nascimento","taxa_sucesso","idade_evasao","carga_media")
# Normalization
grupo_2_numerical_norm <- as.data.frame(scale(grupo_2_numerical))
# Elbow method
fviz_nbclust(grupo_2_numerical_norm, kmeans, method = "wss") +
geom_vline(xintercept = 4, linetype = 2) + # add line for better visualisation
labs(subtitle = "Elbow method") # add subtitle
grupo_2_kmeans <- kmeans(grupo_2_numerical_norm, centers=4)
#grupo_1$grupo <- as.character(grupo_1_kmeans$cluster)
# Dimension reduction using PCA
pca <- prcomp(grupo_2_numerical, scale = TRUE)
# Coordinates of individuals
ind.coord <- as.data.frame(get_pca_ind(pca)$coord)
# Add clusters obtained using the K-means algorithm
ind.coord$cluster <- factor(grupo_2_kmeans$cluster)
ind.coord$matricula <- grupo_2$matricula
ind.coord$idade_evasao <- grupo_2$idade_evasao
ind.coord$carga_media <- grupo_2$carga_media
ind.coord$taxa_sucesso <- grupo_2$taxa_sucesso
ind.coord$forma_evasao <- grupo_2$forma_evasao
ind.coord$sexo <- grupo_2$sexo
ind.coord$ano_nascimento <- grupo_2$ano_nascimento
# Data inspection
head(ind.coord)
## Dim.1 Dim.2 Dim.3 Dim.4 Dim.5 Dim.6 Dim.7
## 1 -3.881407 2.457329 0.1107274 0.3526435 0.42193235 -0.3983729 -5.759076e-15
## 2 -2.359275 1.932901 0.5839414 0.6189247 -0.26301712 -0.9355820 -5.513578e-15
## 3 -1.923742 1.397887 0.4252887 0.6361039 -0.45451966 -0.9696216 -5.525796e-15
## 4 -1.985078 0.273729 2.4281457 -1.6991643 1.03474613 -0.6531487 -4.907769e-15
## 5 -1.205811 2.793208 0.8791316 0.4257806 -0.05452159 0.5842767 -5.356579e-15
## 6 -1.857364 2.273905 0.3319828 0.3627056 -0.08547713 0.1840967 -5.870047e-15
## cluster matricula idade_evasao carga_media taxa_sucesso forma_evasao sexo
## 1 1 102210027 31 22.46154 0.4486301 21 1
## 2 4 103210008 26 19.25000 0.5324675 22 1
## 3 4 103210012 25 20.92308 0.5808824 22 1
## 4 3 103210022 25 19.90909 0.5296804 4 2
## 5 4 104210021 24 20.55556 0.1459459 21 1
## 6 4 104210029 26 22.45455 0.2955466 22 1
## ano_nascimento
## 1 1978
## 2 1983
## 3 1985
## 4 1985
## 5 1985
## 6 1984
# Percentage of variance explained by dimensions
eigenvalue <- round(get_eigenvalue(pca), 1)
variance.percent <- eigenvalue$variance.percent
head(eigenvalue)
## eigenvalue variance.percent cumulative.variance.percent
## Dim.1 2.1 29.5 29.5
## Dim.2 1.5 21.2 50.7
## Dim.3 1.1 15.7 66.4
## Dim.4 1.0 13.9 80.3
## Dim.5 0.8 12.1 92.4
## Dim.6 0.5 7.6 100.0
library(ggpubr)
ggscatter(
ind.coord, x = "Dim.1", y = "Dim.2",
color = "cluster", palette = "npg", ellipse = TRUE, ellipse.type = "convex", ggtheme = theme_bw(),
xlab = paste0("Dim 1 (", variance.percent[1], "% )" ),
ylab = paste0("Dim 2 (", variance.percent[2], "% )" )
) +
stat_mean(aes(color = cluster), size = 4)
fig <- plot_ly(data = ind.coord,type="scatter",mode="markers", size=12,x = ~Dim.1, y = ~Dim.2, color = ~cluster, text = ~paste("Matrícula: ", matricula, '<br>Idade:', idade_evasao, '<br>Carga média:', carga_media,'<br>Taxa de sucesso:', taxa_sucesso,'<br>Sexo:', sexo, '<br>Forma de evasão:', forma_evasao,'<br>Ano de nascimento:', ano_nascimento))
fig